const koaJwt = require("koa-jwt");
const jwt = require("jsonwebtoken");
const { JWT_SECRET, TOKEN_EXPIRES } = require("../config/jwt.config"); // 从配置文件读取密钥和过期时间

// 生成 Token
const generateToken = (payload = {}) => {
  return jwt.sign(payload, JWT_SECRET, { expiresIn: TOKEN_EXPIRES });
};

// JWT 鉴权中间件
const verifyToken = koaJwt({
  secret: JWT_SECRET,
  key: "user", // 解析后的 payload 挂载到 ctx.state.user
}).unless({
  path: [/\/loginIn/, /\/register/], // 白名单路由
});

// 统一错误处理
const authErrorHandler = async (ctx, next) => {
  try {
    await next();
  } catch (err) {
    console.error(err);
    if (err.status === 401) {
      ctx.status = 401;
      ctx.body = { code: 401, message: "用户未登录或已过期" };
    } else {
      throw err;
    }
  }
};

module.exports = {
  generateToken,
  verifyToken,
  authErrorHandler,
};
